# 从sqlalchemy模块导入create_engine、Column、Integer、String、ForeignKey等必要组件
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, or_

# 从sqlalchemy.orm模块导入declarative_base函数，用于创建基类
from sqlalchemy.orm import declarative_base, relationship

try:
    # 创建MySQL数据库连接引擎，指定连接字符串
    engine = create_engine("mysql+pymysql://root:968716asD@localhost:3306/jobs")
    # 创建声明性基类，所有模型类都将继承自这个基类
    Base = declarative_base()

    # 定义User模型类，继承自Base基类
    class User(Base):
        # 指定数据库表名为'users'
        __tablename__ = "users"

        # 定义id字段，整型，主键
        id = Column(Integer, primary_key=True)
        # 定义name字段，字符串类型，指定长度
        name = Column(String(50))
        # 定义fullname字段，字符串类型，指定长度
        fullname = Column(String(50))

        # 定义与Address表的一对多关系，back_populates指定反向引用
        addresses = relationship("Address", back_populates="user")

    # 定义Address模型类，继承自Base基类
    class Address(Base):
        # 指定数据库表名为'addresses'
        __tablename__ = "addresses"

        # 定义id字段，整型，主键
        id = Column(Integer, primary_key=True)
        # 定义email_address字段，字符串类型，不能为空，指定长度
        email_address = Column(String(100), nullable=False)
        # 定义user_id字段，整型，外键关联users表的id字段
        user_id = Column(Integer, ForeignKey("users.id"))

        # 定义与User表的多对一关系，back_populates指定反向引用
        user = relationship("User", back_populates="addresses")

    # 在数据库中创建所有定义的表
    Base.metadata.create_all(engine)

except Exception as e:
    print("创建数据库失败")

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()


users = session.query(User).all()
# 遍历查询结果并打印每个用户的fullname
for user in users:
    print(user.fullname)
